package com.smallprogram.www.generator;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;


public class MyGenerator {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        //全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("hj");   // 作者
        gc.setOpen(false);      //生成代码后是否打开文件夹

        // gc.setEntityName("%sEntity");			//实体命名方式  默认值：null 例如：%sEntity 生成 UserEntity
        gc.setMapperName("%sMapper");			//mapper 命名方式 默认值：null 例如：%sDao 生成 UserDao
        gc.setXmlName("%sMapper");				//Mapper xml 命名方式   默认值：null 例如：%sDao 生成 UserDao.xml
        gc.setServiceName("%sService");			//service 命名方式   默认值：null 例如：%sBusiness 生成 UserBusiness
        gc.setServiceImplName("%sServiceImpl");	//service impl 命名方式  默认值：null 例如：%sBusinessImpl 生成 UserBusinessImpl
        gc.setControllerName("%sController");	//controller 命名方式    默认值：null 例如：%sAction 生成 UserController

        mpg.setGlobalConfig(gc);

        //数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/smallprogram?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        // pc.setModuleName("samllprogram"); // 模块名称, 这里可以根据不同模块来写
        pc.setParent("com.smallprogram.www"); // 父包名
        pc.setController("controller");//设置Controller的包名
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setMapper("mapper");
        pc.setEntity("model");
        //pc.setXml("xml");
        mpg.setPackageInfo(pc);

        // 如果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        //公共父类
        // strategy.setSuperControllerClass("com.smallprogram.www.controller.BaseController");//父类控制器
        strategy.setSuperEntityClass("com.smallprogram.www.entity.BaseEntity");//实体类父类
        //写于父类中的公共字段
        strategy.setSuperEntityColumns("id");//实体类中添加id
        strategy.setSuperEntityColumns("deleteOption");
        strategy.setSuperEntityColumns("version");

        strategy.setInclude(new String[]{"customer","evaluation","goods","logistics","ordered","store"});  // 如果要生成多个表,这里可以传入String[]
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName()+"_");

        mpg.setStrategy(strategy);
        mpg.execute();
    }

}
